Technical Q&A
QTMTB 48 - What is SetMovieDefaultDataRef ?
(14-March-97)
Q
I can't find documentation for the SetMovieDefaultDataRef function.
What does it do, and how do I use it?
A
SetMovieDefaultDataRef is defined in Movies.h as:
pascal OSErr SetMovieDefaultDataRef(Movie theMovie, Handle dataRef, OSType dataRefType);
It allows you to control where data will be written to when added to a movie.
For example, if a movie was loaded from a file, the default data reference is
initialized to be the file from which the movie was loaded. This example will
set the default data reference to be a handle in memory:
OSErr ConvertGeneralMIDIToSoundTrack (void)
{
OSErr err = noErr;
StandardFileReply reply;
short refNum;
long logicalEOF;
Handle dataHandle = nil, tempHandle = nil;
Movie theMovie = nil, tempMovie = nil;
// Specify the General MIDI file to import
StandardGetFilePreview (nil, 0, nil, &reply);
if (reply.sfGood)
{
// Open the data fork and suck everything into a handle
err = FSpOpenDF (&reply.sfFile, fsRdPerm, &refNum);
err = GetEOF (refNum, &logicalEOF);
dataHandle = NewHandleClear (logicalEOF);
HLock (dataHandle);
err = FSRead (refNum, &logicalEOF, *dataHandle);
HUnlock (dataHandle);
FSClose (refNum);
// Create a new movie in memory, set its default data reference
// to be a handle
tempMovie = NewMovie (newMovieActive);
tempHandle = NewHandleClear (4);
SetMovieDefaultDataRef (tempMovie, tempHandle,
HandleDataHandlerSubType);
DisposeHandle (tempHandle);
// Paste the handled data into our movie
err = PasteHandleIntoMovie (dataHandle, 'Midi', tempMovie, 0, nil);
// Save the movie out to a flattened file
StandardPutFile ("\pSave MIDI to:", "\pMIDI movie", &reply);
if (reply.sfGood)
{
theMovie = FlattenMovieData (tempMovie,
flattenAddMovieToDataFork, &reply.sfFile, 'TVOD',
smCurrentScript, createMovieFileDeleteCurFile);
}
}
return err;
}
This method works fine as long as you have enough memory, and don't want to save
the movie to disk. To put data into a file, call this function in order to pass in an
alias to the file as the data reference and rAliasType as the data reference type:
SetMovieDefaultDataRef (tempMovie, fileAlias, rAliasType);
--Mike Bitz
Worldwide Developer Technical Support
Technical Q&A
Previous Question |
Contents |
Next Question
To contact us, please use the Contact Us page.
|